package com.campus.food.service;

import com.campus.food.model.entity.Address;

import java.util.List;

/**
 * 地址服务接口
 * 
 * @author Claude3.7 Sonnet
 * @since 2025-05-29
 */
public interface AddressService {
    
    /**
     * 添加地址
     * @param address 地址信息
     * @return 添加成功的地址
     */
    Address addAddress(Address address);
    
    /**
     * 根据ID查询地址
     * @param id 地址ID
     * @return 地址信息
     */
    Address getAddressById(Long id);
    
    /**
     * 更新地址信息
     * @param address 地址信息
     * @return 更新结果
     */
    boolean updateAddress(Address address);
    
    /**
     * 删除地址
     * @param id 地址ID
     * @param userId 用户ID（用于权限验证）
     * @return 删除结果
     */
    boolean deleteAddress(Long id, Long userId);
    
    /**
     * 根据用户ID查询地址列表
     * @param userId 用户ID
     * @return 地址列表
     */
    List<Address> getAddressByUserId(Long userId);
    
    /**
     * 根据用户ID查询默认地址
     * @param userId 用户ID
     * @return 默认地址
     */
    Address getDefaultAddress(Long userId);
    
    /**
     * 设置默认地址
     * @param id 地址ID
     * @param userId 用户ID（用于权限验证）
     * @return 设置结果
     */
    boolean setDefaultAddress(Long id, Long userId);
    
    /**
     * 查询用户地址数量
     * @param userId 用户ID
     * @return 地址数量
     */
    long getAddressCount(Long userId);
    
    /**
     * 搜索地址
     * @param userId 用户ID
     * @param keyword 搜索关键词
     * @return 地址列表
     */
    List<Address> searchAddress(Long userId, String keyword);
    
    /**
     * 批量删除地址
     * @param ids 地址ID列表
     * @param userId 用户ID（用于权限验证）
     * @return 删除结果
     */
    boolean deleteAddressBatch(List<Long> ids, Long userId);
    
    /**
     * 获取所有地址列表（管理员专用）
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID（可选）
     * @return 地址列表
     */
    List<Address> getAllAddresses(int page, int size, Long userId);
} 